/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Vue;

import Modele.Cellule;
import java.awt.Color;
import java.awt.Point;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

/**
 * Classe représentant une case de la grille d'affichage du jeu de la vie
 * @author FERRIER/NONGLATON
 */
public class Case extends JPanel implements Observer {

    private Cellule uneCellule;
    private Point coordonnees;
    static private Color couleurVie = Color.black;
    static private Color couleurMort = Color.white;

    /**
     * Créé la case de coordonnées (x,y).
     * @param x coordonnée verticale
     * @param y coordonnée horizontale
     */
    public Case(int x, int y) {
        super();
        this.coordonnees = new Point(x, y);
        setBackground(couleurMort);
        setBorder(new LineBorder(Color.black, 1));

    }

    /**
     * Initialise la cellule de la case.
     * @param cel Passer en paramètre la cellule correspondant à la case
     */
    public void setUneCellule(Cellule cel) {
        this.uneCellule = cel;
        this.uneCellule.addObserver(this);
        changeCouleur(uneCellule.getEtat());

    }

    /**
     * Retourne la cellule correspondant à la case
     * @return la cellule correspondant à la case
     */
    public Cellule getUneCellule() {
        return uneCellule;
    }

    


    public void update(Observable o, Object arg) {
        changeCouleur(uneCellule.getEtat());

    }

    /**
     * Modifie l'état de la cellule correspondant à la case.
     * @param etat nouvel état de la cellule
     */
    public void setEtatCellule(boolean etat) {
        this.uneCellule.setEtat(etat);
    }

    /**
     * Récupère l'état de la cellule correspondant à la case.
     * @return true si la cellule est vivante, false si elle est morte
     */
    public boolean getEtatCellule() {
        return uneCellule.getEtat();
    }



    @Override
    public String toString() {
        return ("Case : " + coordonnees);
    }

    /**
     * Permet de modifier la couleur de la case pour correspondre à l'état de la cellule
     */
    private void changeCouleur(boolean etat) {
        if (etat) {//si vivante
            setBackground(couleurVie);
        } else {//si morte
            setBackground(couleurMort);
        }
    }

    /**
     * Retourne la couleur associée a une cellule morte
     * @return couleur d'une cellule morte
     */
    public static Color getCouleurMort() {
        return couleurMort;
    }

    /**
     * Definit la couleur associée à une cellule morte
     * @param couleurMort nouvelle couleur d'une cellule morte
     */
    public static void setCouleurMort(Color couleurMort) {
        Case.couleurMort = couleurMort;
    }

    /**
     * Retourne la couleur associée a une cellule vivante
     * @return couleur d'une cellule vivante
     */
    public static Color getCouleurVie() {
        return couleurVie;
    }

    /**
     * Definit la couleur associée à une cellule vivante
     * @param couleurVie nouvelle couleur d'une cellule vivante
     */
    public static void setCouleurVie(Color couleurVie) {
        Case.couleurVie = couleurVie;
    }

    
}
